26. 其他注意事项
观察这些形状
你需要检查传入模型和其他代码的张量形状是否正确。在调试和开发过程中使用 .shape
方法。
如果网络训练效果不好,检查以下几个事项:
在训练循环中使用 optimizer.zero_grad()
清理梯度。如果执行验证循环,使用 model.eval()
将网络设为评估模式,再使用 model.train()
将其设为训练模式。
CUDA 错误
有时候你会遇到这个错误:
RuntimeError: Expected object of type torch.FloatTensor but found type torch.cuda.FloatTensor for argument #1 ‘mat1’
第二个类型是 torch.cuda.FloatTensor
,这意味着它是已经移到 GPU 的张量。它想获得类型为 torch.FloatTensor
的张量,但是没有 .cuda
,因此该张量应该在 CPU 上。PyTorch 只能对位于相同设备上的张量进行运算,因此必须同时位于 CPU 或 GPU 上。如果你要在 GPU 上运行网络,一定要使用 .to(device)
将模型和所有必要张量移到 GPU 上,其中 device
为 "cuda"
或 "cpu"
。